package pl.edu.pk.psb.bc.assembler;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.ds.PolaczenieDs;
import pl.edu.pk.psb.bc.ds.PrzystanekDs;
import pl.edu.pk.psb.bc.dto.PolaczenieDto;
import pl.edu.pk.psb.bc.dto.TrasaDto;

@Component
public class PolaczenieAssembler {

	@Autowired
	RodzajPolaczeniaAssembler rodzajPolAssembler;

	@Autowired
	TrasaAssembler trasaAssembler;

	public PolaczenieDs konwertuj(PolaczenieDto dto) {
		PolaczenieDs polaczenieDs = new PolaczenieDs();
		polaczenieDs.setNazwa(dto.getNazwa());
		boolean[] dni = dto.getDniKursowania();
		for (int i = 0; i < dto.getDniKursowania().length; i++) {
			switch (i) {
			case 0:
				polaczenieDs.setPoniedzialek(dni[0]);
				break;
			case 1:
				polaczenieDs.setWtorek(dni[1]);
				break;
			case 2:
				polaczenieDs.setSroda(dni[2]);
				break;
			case 3:
				polaczenieDs.setCzwartek(dni[3]);
				break;
			case 4:
				polaczenieDs.setPiatek(dni[4]);
				break;
			case 5:
				polaczenieDs.setSobota(dni[5]);
				break;
			case 6:
				polaczenieDs.setNiedziela(dni[6]);
				break;
			}
		}
		polaczenieDs.setRodzajTransportu(rodzajPolAssembler.konwertuj(dto
				.getRodzajTransportu()));
		polaczenieDs.setListaPrzystankowNaTrasie(trasaAssembler.konwertujDoDs(
				dto.getListaPrzystankowNaTrasie(), polaczenieDs));
		return polaczenieDs;
	}

	public List<PolaczenieDs> konwertujDoDs(List<PolaczenieDto> listaPolaczen) {
		List<PolaczenieDs> polaczeniaDs = new ArrayList<PolaczenieDs>();
		for (PolaczenieDto PolaczenieDto : listaPolaczen) {
			polaczeniaDs.add(konwertuj(PolaczenieDto));
		}
		return polaczeniaDs;
	}

	public PolaczenieDto konwertuj(PolaczenieDs ds) {
		PolaczenieDto dto = new PolaczenieDto();
		dto.setId(ds.getId());
		dto.setListaPrzystankowNaTrasie(trasaAssembler.konwertujDoDto(
				ds.getListaPrzystankowNaTrasie(), dto));
		dto.setNazwa(ds.getNazwa());
		dto.setRodzajTransportu(rodzajPolAssembler.konwertuj(ds
				.getRodzajTransportu()));
		boolean[] dniKursowania = new boolean[7];
		dniKursowania[0] = ds.isPoniedzialek();
		dniKursowania[1] = ds.isWtorek();
		dniKursowania[2] = ds.isSroda();
		dniKursowania[3] = ds.isCzwartek();
		dniKursowania[4] = ds.isPiatek();
		dniKursowania[5] = ds.isSobota();
		dniKursowania[6] = ds.isNiedziela();
		dto.setDniKursowania(dniKursowania);
		return dto;
	}

	public List<PolaczenieDto> konwertujDoDto(List<PolaczenieDs> listaPolaczen) {
		List<PolaczenieDto> polaczeniaDto = new ArrayList<PolaczenieDto>();
		for (PolaczenieDs polaczenieDs : listaPolaczen) {
			polaczeniaDto.add(konwertuj(polaczenieDs));
		}
		return polaczeniaDto;
	}
}
